from matplotlib import pyplot as plt

from analysis import house_sales_price_corr, house_sales_zipcode_agg, house_sales_year_price_mean, get_column_list
from init import process_house_sales

# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']

# 房价分布直方图
def house_price_histogram():
    house_sales = process_house_sales()
    plt.figure(figsize=(10, 6))
    plt.hist(house_sales['price'], bins=30, edgecolor='k')
    plt.title('房价分布直方图')
    plt.xlabel('房价')
    plt.ylabel('频数')
    plt.show()

# 卧室数量与房价的散点图
def house_bedrooms_price_scatter():
    house_sales = process_house_sales()
    plt.figure(figsize=(10, 6))
    plt.scatter(house_sales['bedrooms'], house_sales['price'])
    plt.title('卧室数量与房价的关系')
    plt.xlabel('卧室数量')
    plt.ylabel('房价')
    plt.show()

# 各特征与房价的相关性热力图
def house_feature_price_heatmap():
    correlation = house_sales_price_corr().to_frame() # 转二维数组
    plt.figure(figsize=(12, 8))
    plt.imshow(correlation, cmap='coolwarm', interpolation='nearest')
    plt.colorbar()
    plt.xticks(range(len(correlation.columns)), correlation.columns, rotation=90)
    plt.yticks(range(len(correlation.index)), correlation.index)
    plt.title('各特征与房价的相关性热力图')
    plt.show()

# 不同邮政编码区域平均房价的柱状图
def house_zipcode_price_bar():
    zipcode_stats = house_sales_zipcode_agg()
    plt.figure(figsize=(12, 6))
    plt.bar(x=zipcode_stats.index.astype(str), height=zipcode_stats['price'])
    plt.title('不同邮政编码区域的平均房价')
    plt.xlabel('邮政编码')
    plt.xticks(rotation=45)
    plt.show()

# 每年平均房价的折线图
def house_year_price_line():
    yearly_avg_price = house_sales_year_price_mean()
    plt.figure(figsize=(10, 6))
    plt.plot(yearly_avg_price.index, yearly_avg_price.price)
    plt.title('每年平均房价趋势')
    plt.xlabel('年份')
    plt.ylabel('平均房价')
    plt.show()

# 不同翻新情况的房价箱线图
def house_is_renovated_price_box():
    house_sales = process_house_sales()
    plt.figure(figsize=(10, 6))
    house_sales.boxplot(column='price', by='is_renovated')
    plt.title('不同翻新情况的房价箱线图')
    plt.xlabel('是否翻新')
    plt.xticks([1, 2], ['未翻新', '已翻新'])
    plt.ylabel('房价')
    plt.suptitle('') # 去掉默认的标题
    plt.show()

# 房屋使用年限与房价的散点图
def house_age_built_price_scatter():
    house_sales = process_house_sales()
    plt.figure(figsize=(10, 6))
    plt.scatter(house_sales['age_built'], house_sales['price'])
    plt.title('房屋使用年限与房价的关系')
    plt.xlabel('房屋使用年限')
    plt.ylabel('房价')
    plt.show()